package traveldream.ejb.entities;



import java.io.Serializable;
import java.lang.String;
import java.sql.Time;

import javax.persistence.*;

import travelDream.ejb.DTOs.VoloDTO;

/**
 * Entity implementation class for Entity: Volo
 *
 */
@Entity
@Table(name="VOLO")
@NamedQueries({ @NamedQuery(name= Volo.FIND_ALL, query="SELECT v FROM Volo v WHERE v.prenotabile = true"),
				@NamedQuery(name= Volo.FIND_BY_DESTINAZIONE, query = "SELECT v FROM Volo v WHERE v.cittaArrivo = :cittaArrivo AND v.prenotabile = true"),
				@NamedQuery(name= Volo.FIND_BY_PARTENZA, query = "SELECT v FROM Volo v WHERE v.cittaPartenza = :cittaPartenza AND v.prenotabile = true"),
				@NamedQuery(name= Volo.FIND_CITTA, query = "SELECT DISTINCT v1.cittaArrivo FROM Volo v1, Volo v2 WHERE v1.cittaArrivo = v2.cittaPartenza"),
				@NamedQuery(name= Volo.FIND_BY_CODICE, query = "SELECT v FROM Volo v WHERE v.codice = :codice")
	})
public class Volo implements Serializable {
	
	//Utilizzabili dagli EJB per creare le queries
	public static final String FIND_ALL = "Volo.findAll";
	public static final String FIND_BY_DESTINAZIONE = "Volo.findByDestinazione";
	public static final String FIND_BY_PARTENZA = "Volo.findByPartenza";
	public static final String FIND_CITTA = "Volo.findCitta";
	public static final String FIND_BY_CODICE = "Volo.findByCodice";
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int voloID;
	private String codice;
	private String compagnia;
	private Time ora;
	private String cittaPartenza;
	private String cittaArrivo;
	private boolean prenotabile;
	
	private static final long serialVersionUID = 1L;

	//costruttore default
	public Volo() {
		super();
		prenotabile = true; //nuovo prodotto base nasce come "prenotabile"
	}   
	
	//costruttore che genera entity a partire da VoloDTO
	public Volo(VoloDTO volo) {
		this.codice = volo.getCodice();
		this.compagnia = volo.getCompagnia();
		this.ora = Time.valueOf(volo.getOra());	//String > Time
		this.cittaPartenza = volo.getCittaPartenza();
		this.cittaArrivo = volo.getCittaArrivo();
		this.prenotabile = true; //nuovo prodotto base nasce come "prenotabile"
	}

	//getters e setters
	public long getVoloID() {
		return this.voloID;
	}

	public void setVoloID(int voloID) {
		this.voloID = voloID;
	}   
	
	public String getCodice() {
		return this.codice;
	}

	public void setCodice(String codice) {
		this.codice = codice;
	}
	
	public String getCompagnia() {
		return this.compagnia;
	}

	public void setCompagnia(String compagnia) {
		this.compagnia = compagnia;
	} 
	
	public Time getOra() {
		return ora;
	}

	public void setOra(Time ora) {
		this.ora = ora;
	}

	public String getCittaPartenza() {
		return this.cittaPartenza;
	}

	public void setCittaPartenza(String cittaPartenza) {
		this.cittaPartenza = cittaPartenza;
	}
	
	public String getCittaArrivo() {
		return this.cittaArrivo;
	}

	public void setCittaArrivo(String cittaArrivo) {
		this.cittaArrivo = cittaArrivo;
	}
	
	public boolean isPrenotabile() {
		return prenotabile;
	}

	public void setPrenotabile(boolean prenotabile) {
		this.prenotabile = prenotabile;
	}

	
	//converte in VoloDTO, utilizzabile da EJB per mandare dati al Web ("prenotabile" non serve)
	public VoloDTO entityToDTO(){
		VoloDTO tmp = new VoloDTO();
		tmp.setVoloId(voloID);
		tmp.setCodice(codice);
		tmp.setCompagnia(compagnia);
		tmp.setOra(ora.toString());
		tmp.setCittaPartenza(cittaPartenza);
		tmp.setCittaArrivo(cittaArrivo);
		return tmp;
	}
	
}
